package codeTop;

import java.util.ArrayList;
import java.util.List;

/**
 * q679
 *
 * @author 雨凡
 * @version q679.java, v0.1
 * @date 2025/07/04/22:40
 */
public class q679 {
    public boolean judgePoint24(int[] cards) {
        List<Double> list = new ArrayList<>();
        for (int card : cards) {
            list.add((double)card);
        }
        dfs(list);
        return flag;
    }

    private void dfs(List<Double> list) {
        if (flag) {
            return;
        }
        if (list.size() == 1) {
            if (Math.abs(list.get(0)-24)<1e-6) {
                flag = true;
            }
            return;
        }
        for (int i = 0; i < list.size(); i++) {
            for (int j = i+1; j < list.size() ; j++) {
                Double v1 = list.get(i);
                Double v2 = list.get(j);
                List<Double> list2 = new ArrayList<>();
                for (int k = 0; k < list.size(); k++) {
                    if (k != i && k != j) {
                        list2.add(list.get(k));
                    }
                }
                list2.add(v1*v2);
                dfs(list2);
                list2.remove(list2.size()-1);
                list2.add(v1+v2);
                dfs(list2);
                list2.remove(list2.size()-1);
                list2.add(v1-v2);
                dfs(list2);
                list2.remove(list2.size()-1);
                list2.add(v2-v1);
                dfs(list2);
                list2.remove(list2.size()-1);
                if (Math.abs(v2) >= 1e-6) {
                    list2.add(v1/v2);
                    dfs(list2);
                    list2.remove(list2.size()-1);
                }
                if (Math.abs(v1) >= 1e-6) {
                    list2.add(v2/v1);
                    dfs(list2);
                    list2.remove(list2.size()-1);
                }
            }
        }
    }
    boolean flag = false;
}
